//
//  String+Extension.swift
//  13-表情字符串转表情
//
//  Created by bing on 16/4/5.
//  Copyright © 2016年 bing. All rights reserved.
//

import UIKit

extension String {
    
    /**
     表情字符串表情
     
     - parameter text: 带表情名称的文本
     
     - returns: 带表情图片的属性文本
     */
    func emoticonTextToEmoticonAttrString(font: UIFont) ->NSAttributedString {
        // 1.获取微博文本里面的表情名称
        let pattern = "\\[.*?\\]" // [] 在正在表达式里面有特殊含义需要转义
        
        let regular = try! NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.DotMatchesLineSeparators)
        
        let results = regular.matchesInString(self, options: NSMatchingOptions(rawValue: 0), range: NSRange(location: 0, length: self.characters.count))
        
        // 将普通文本转成属性文本，方便后面替换出图片
        let resultAttrString = NSMutableAttributedString(string: self)
        // 遍历每个结果
        // 如果从前面往后面替换会影响后面的范围
        // results.reverse():然数组反过来
        for result in results.reverse() {
            // 每个结果里面只有一个范围
            print("一个结果")
            //let numberOfRanges = result.numberOfRanges
            let range = result.rangeAtIndex(0)
            //print("numberOfRanges: \(numberOfRanges)")
            //print("range:\(range)")
            let emoticonName = (self as NSString).substringWithRange(range)
            print("查找到表情名称:\(emoticonName)")
            
            // 2.根据表情名称查找表情模型 *
            if let emoticon = QBEmoticonPackageManager.emoticonNameToEmoticonModel(emoticonName) {
                // 真的找到了模型
                // 3.将表情模型里面的图片转成属性文本
                let attr = emoticon.emoticonModelToArrT(font)
                // 4.将表情名称替换成表情图片的属性文本 *
                resultAttrString.replaceCharactersInRange(range, withAttributedString: attr)
            }
        }
        return resultAttrString
    }
    
}
